#!/bin/bash

# 检查是否为root用户
if [ "$(id -u)" != "0" ]; then
    echo "错误: 必须以root用户运行此脚本"
    exit 1
fi

# 自我复制到临时目录并执行（避免删除自身导致的问题）
SCRIPT_PATH=$(readlink -f "$0")
SCRIPT_DIR=$(dirname "$SCRIPT_PATH")
SCRIPT_NAME=$(basename "$SCRIPT_PATH")
TEMP_SCRIPT="/tmp/${SCRIPT_NAME}"

# 如果脚本不在临时目录中，则复制并执行临时副本
if [ "$SCRIPT_DIR" != "/tmp" ]; then
    echo "将卸载脚本复制到临时目录并从那里执行..."
    cp "$SCRIPT_PATH" "$TEMP_SCRIPT"
    chmod +x "$TEMP_SCRIPT"
    exec "$TEMP_SCRIPT" "$@"
    # 此处之后的代码不会执行，因为exec会替换当前进程
fi

# 以下代码只有在临时副本中执行时才会运行

# 解析命令行参数
usage() {
    echo "用法: $0 [选项]"
    echo "选项:"
    echo "  -p, --path PATH    指定安装路径前缀 (比如: ./uninstall.sh -p /usr/local/bin)"
    echo "  -h, --help         显示此帮助信息"
    exit 1
}

# 默认安装路径
CUSTOM_INSTALL_PATH=""

# 解析命令行参数
while [[ $# -gt 0 ]]; do
    key="$1"
    case $key in
        -p|--path)
            CUSTOM_INSTALL_PATH="$2"
            shift 2
            ;;
        -h|--help)
            usage
            ;;
        *)
            echo "未知选项: $1"
            usage
            ;;
    esac
done

# 导出安装路径环境变量，供config.sh使用
export CUSTOM_INSTALL_PATH

# 检查是否提供了安装路径
if [ -z "$CUSTOM_INSTALL_PATH" ]; then
    echo "错误: 必须指定安装路径"
    usage
fi

# 加载配置
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source "${SCRIPT_DIR}/service/config.sh"

# 显示卸载信息
info "卸载路径: ${INSTALL_FULL_PATH}"

# 检查权限
check_root

# 提示用户卸载影响
echo -e "${YELLOW}警告：${NC}"
echo "1. 卸载过程将会停止所有 ${SOFTWARE_NAME} 服务"
echo "2. 将删除以下内容："
echo "   - 安装目录：${INSTALL_FULL_PATH}"
echo "   - 环境变量配置：/etc/profile.d/fdsmastergo_evn.sh"
echo "   - 开机启动配置：/etc/init.d/fdsmastergo"
echo "   - 命令别名：fdsmastergo-start, fdsmastergo-stop 等"
echo "3. 以下内容不会被删除："
echo "   - 备份目录：${INSTALL_PATH}/fdsmastergo_backup"
echo "   - 日志文件：${INSTALL_FULL_PATH}/logs"
echo -e "${YELLOW}是否继续？[y/N]${NC}"
read -r response
if [[ ! "$response" =~ ^[yY]$ ]]; then
    echo "卸载已取消"
    exit 0
fi

# 第一步：停止所有服务
info "停止所有服务..."
if [ -x "${INSTALL_FULL_PATH}/service/micro_stop.sh" ]; then
    ${INSTALL_FULL_PATH}/service/micro_stop.sh
else
    warn "未找到停止脚本(${INSTALL_FULL_PATH}/service/micro_stop.sh)，尝试直接终止进程..."
    # 从services.json获取服务列表并停止
    if [ -f "${INSTALL_FULL_PATH}/services.json" ]; then
        SERVICES=$(jq -r '.start_order[]' "${INSTALL_FULL_PATH}/services.json")
        for service in $SERVICES; do
            pkill -x "$service" >/dev/null 2>&1 || true
            sleep 1
        done
    fi
fi

# 第二步：移除开机启动配置
info "移除开机启动配置..."
if [ -f "/etc/init.d/fdsmastergo" ]; then
    if command -v update-rc.d >/dev/null 2>&1; then
        update-rc.d -f fdsmastergo remove
    elif command -v chkconfig >/dev/null 2>&1; then
        chkconfig --del fdsmastergo
    fi
    rm -f /etc/init.d/fdsmastergo
fi

# 第三步：移除环境变量配置
info "移除环境变量配置..."
if [ -f "/etc/profile.d/fdsmastergo_evn.sh" ]; then
    # 取消当前shell中的别名和环境变量
    unalias fdsmastergo-start fdsmastergo-stop fdsmastergo-restart fdsmastergo-status fdsmastergo-log 2>/dev/null || true
    unset FDSMASTERGO_INSTALL_DIR
    # 从PATH中移除服务目录
    export PATH=$(echo $PATH | sed -e "s|${FDSMASTERGO_INSTALL_DIR}/service:||g")
    # 删除配置文件
    rm -f /etc/profile.d/fdsmastergo_evn.sh
    info "环境变量已清理"
    warn "注意：其他终端窗口中的环境变量和别名仍然存在，请关闭这些终端或重新登录以完全清理"
fi

# 第四步：备份并删除安装目录
if [ -d "${INSTALL_FULL_PATH}" ]; then
    # 创建备份目录
    DATETIME=$(date +%Y%m%d_%H%M%S)
    BACKUP_ROOT="${INSTALL_PATH}/fdsmastergo_backup"
    mkdir -p "${BACKUP_ROOT}"
    
    # 完整备份安装目录
    info "备份整个安装目录，请稍后 （可能需要几分钟）..."
    BACKUP_FILE="${BACKUP_ROOT}/${SOFTWARE_NAME}_${DATETIME}.tar.gz"
    tar -czf "${BACKUP_FILE}" -C "$(dirname "${INSTALL_FULL_PATH}")" "$(basename "${INSTALL_FULL_PATH}")" || warn "完整备份失败，继续执行卸载"
    info "完整备份已保存到: ${BACKUP_FILE}"

    # 删除安装目录
    info "删除安装目录..."
    rm -rf "${INSTALL_FULL_PATH}"
fi

# 完成提示
echo
echo -e "${GREEN}卸载完成！${NC}"
echo -e "${YELLOW}注意事项：${NC}"
echo "1. 当前终端的环境变量和别名已清理"
echo "2. 其他终端窗口中的环境变量和别名仍然存在"
echo "3. 要完全清理环境变量和别名，请："
echo "   - 关闭所有终端窗口并重新打开，或"
echo "   - 重新登录系统"
echo
echo -e "${YELLOW}以下内容未删除：${NC}"
echo "1. 备份目录：${BACKUP_ROOT}"
echo "   - 完整备份：${BACKUP_FILE}"
echo "   如果确认不再需要，可以手动删除："
echo "   rm -rf ${BACKUP_ROOT}"
echo
echo -e "${GREEN}感谢您的使用！${NC}"

# 自清理：删除临时脚本
if [ "$SCRIPT_DIR" = "/tmp" ]; then
    # 使用后台进程删除自身，避免"text file busy"错误
    (sleep 1; rm -f "$SCRIPT_PATH") &
fi

exit 0
